/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.trandio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.model.CuentaCobroVO;
import org.trandio.model.ProgramapypVO;
import org.trandio.util.ConexionDb;


/**
 *
 * @author root
 */
public class CuentaCobroDAO implements CuentaCobroInterface {


  @Override
    public void guardaCuentaCobroEdit(CuentaCobroVO cuentaCobroVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "UPDATE tb_cuentacobro "
                    +"SET identidad=?, fecha_elaboracion=?, fecha_inicio=?, fecha_final=?,genrips=?, numero=?"
                    + "  WHERE id="+cuentaCobroVO.getId();

                System.out.println("SQL del Update tbcuentac="+sql);

		PreparedStatement stmt = conn.prepareStatement(sql);

                java.util.Date fecha = cuentaCobroVO.getFecini();
                java.sql.Date fechasql = new java.sql.Date(fecha.getTime());

                java.util.Date inicio = cuentaCobroVO.getFecini();
                java.sql.Date iniciosql = new java.sql.Date(inicio.getTime());

                java.util.Date fin = cuentaCobroVO.getFecfin();
                java.sql.Date finsql = new java.sql.Date(fin.getTime());

                stmt.setInt(1,cuentaCobroVO.getIdentidad());
                stmt.setDate(2, fechasql);
                stmt.setDate(3, iniciosql);
                stmt.setDate(4, finsql);
                stmt.setInt(5,cuentaCobroVO.getGenrips());
                stmt.setString(6, cuentaCobroVO.getNumero());

                stmt.execute();
		stmt.close();
    }

    @Override
    public int guardaCuentaCobro(CuentaCobroVO cuentaCobroVO) throws SQLException, NamingException {
         ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        System.out.println("INSERTAR CUENTA COBRO");

        String sqlAdiciona  ="INSERT INTO tb_cuentacobro(identidad, fecha_elaboracion, fecha_inicio, fecha_final,genrips, numero)"
                            + "VALUES (?, ?, ?, ?,?, ?) RETURNING id;";

        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);

        java.util.Date fecha = cuentaCobroVO.getFecini();
        java.sql.Date fechasql = new java.sql.Date(fecha.getTime());

        java.util.Date inicio = cuentaCobroVO.getFecini();
        java.sql.Date iniciosql = new java.sql.Date(inicio.getTime());

        java.util.Date fin = cuentaCobroVO.getFecfin();
        java.sql.Date finsql = new java.sql.Date(fin.getTime());

        
        stmt.setInt(1,cuentaCobroVO.getIdentidad());
        stmt.setDate(2, fechasql);
        stmt.setDate(3, iniciosql);
        stmt.setDate(4, finsql);
        stmt.setInt(5,cuentaCobroVO.getGenrips());
        stmt.setString(6, cuentaCobroVO.getNumero());

        


        ResultSet rs = stmt.executeQuery();
        rs.next();
        int resp = rs.getInt(1);
        System.out.println("Insert Generar: "+resp);

        rs.close();
	stmt.close();
        if (!conn.isClosed())
               conn.close();
        return resp;
    }

    @Override
    public CuentaCobroVO getCuentaCobro(int id) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "select "
                 + "tb_cuentacobro.id,"
                 + "tb_cuentacobro.numero,"
                 + "tb_entidad.descripcion"                 
                 + " FROM tb_cuentacobro "
                 + "INNER JOIN tb_entidad ON (tb_cuentacobro.identidad = tb_entidad.id_entidad)"
                 +" WHERE tb_cuentacobro.id="+id;

        System.out.println("Sql buscar cuenta cobro  ID: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        CuentaCobroVO cuentaCobroVO = new CuentaCobroVO();
        try{
        ResultSet res = stmt.executeQuery();
        try{

        if (res.next()) {
                cuentaCobroVO.setId(res.getInt("id"));
                cuentaCobroVO.setNumero(res.getString("numero"));
                cuentaCobroVO.setEntidad(res.getString("descripcion"));

            }
        }finally{
         res.close();
        }
        }finally{
         stmt.close();
         if (!conn.isClosed())
               conn.close();
        }
        return cuentaCobroVO;
    }

    @Override
    public int getCantCuentas(String $sWhere) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        int count = 0;

        String sql = "select count(*)"                 
                 + " FROM tb_cuentacobro "
                 + "INNER JOIN tb_entidad ON (tb_cuentacobro.identidad = tb_entidad.id_entidad)";

            PreparedStatement stmt = conn.prepareStatement(sql);

            try{
            ResultSet res = stmt.executeQuery();
            try{
            if (res.next()) {
                count = res.getInt(1);
            }
            }finally{
                res.close();
            }
            }finally{
                stmt.close();
                if (!conn.isClosed())
               conn.close();
            }

        return count;
    }

    @Override
    public List<CuentaCobroVO> getCuentas(int displayStart, int displayLength, String $sWhere, String orden) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

         List<CuentaCobroVO> lista = new ArrayList<CuentaCobroVO>();
         String condicion = "";

         if(!$sWhere.equals("")){
            //condicion = " WHERE tb_factura.numero LIKE '%"+param+"%' ";
             condicion = $sWhere;
         }



        String sql = "select "
                 + "tb_cuentacobro.id,"
                 + "tb_cuentacobro.numero,"
                 + "tb_entidad.descripcion"                 
                 + " FROM tb_cuentacobro "
                 + "INNER JOIN tb_entidad ON (tb_cuentacobro.identidad = tb_entidad.id_entidad) "
                 + condicion+" "+orden+" LIMIT "+displayLength+" OFFSET "+displayStart;

        System.out.println("Sql BUSCAR CC "+sql);


        PreparedStatement stmt = conn.prepareStatement(sql);


        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    CuentaCobroVO objVO = new CuentaCobroVO();
                    objVO.setId(res.getInt("id"));
                    objVO.setNumero(res.getString("numero"));
                    objVO.setEntidad(res.getString("descripcion"));                    
                    lista.add(objVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
           if (!conn.isClosed())
               conn.close();
        }

        return lista;
    }

  


}